package br.com.webservicedelivery.bean;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.webservicedelivery.dao.ClienteDAO;
import br.com.webservicedelivery.domain.Cliente;
import br.com.webservicedelivery.util.FacesUtil;

@ManagedBean
@ViewScoped
public class ClienteBean {
	private Cliente clienteCadastro;

	private List<Cliente> listaClientes;
	private List<Cliente> listaClientesFiltrados;

	private String acao;
	private Long id;

	public Cliente getClienteCadastro() {
		if (clienteCadastro == null) {
			clienteCadastro = new Cliente();
		}
		return clienteCadastro;
	}

	public void setclienteCadastro(Cliente clienteCadastro) {
		this.clienteCadastro = clienteCadastro;
	}

	public List<Cliente> getListaClientes() {
		return listaClientes;
	}

	public void setListaClientes(List<Cliente> listaClientes) {
		this.listaClientes = listaClientes;
	}

	public List<Cliente> getListaClientesFiltrados() {
		return listaClientesFiltrados;
	}

	public void setListaClientesFiltrados(List<Cliente> listaClientesFiltrados) {
		this.listaClientesFiltrados = listaClientesFiltrados;
	}

	public String getAcao() {
		return acao;
	}

	public void setAcao(String acao) {
		this.acao = acao;
	}

	public Long getCodigo() {
		return id;
	}

	public void setCodigo(Long id) {
		this.id = id;
	}

	public void novo() {

		clienteCadastro = new Cliente();

	}

	public void salvar() {
		try {
			ClienteDAO clienteDAO = new ClienteDAO();
			clienteDAO.salvar(clienteCadastro);

			clienteCadastro = new Cliente();

			FacesUtil.adicionarMsgInfo("Cliente salvo com sucesso");
		} catch (RuntimeException ex) {
			FacesUtil
					.adicionarMsgErro("Erro ao tentar inserir um cliente : "
							+ ex.getMessage());
		}

	}

	public void carregar() {
		try {
			ClienteDAO clienteDAO = new ClienteDAO();
			listaClientes = clienteDAO.listar();
		} catch (RuntimeException ex) {
			FacesUtil
					.adicionarMsgErro("Erro ao tentar listar os clientes: "
							+ ex.getMessage());
		}
	}

	public void carregarCadastro() {
		try {
			if (id != null) {
				ClienteDAO clienteDAO = new ClienteDAO();
				clienteCadastro = clienteDAO.buscarPorId(id);
			} else {
				clienteCadastro = new Cliente();
			}
		} catch (RuntimeException ex) {
			FacesUtil
					.adicionarMsgErro("Erro ao tentar obter os dados dos clientes: "
							+ ex.getMessage());
		}
	}

	public void excluir() {
		try {
			ClienteDAO clienteDAO = new ClienteDAO();
			clienteDAO.excluir(clienteCadastro);

			FacesUtil.adicionarMsgInfo("Cliente removido com sucesso");
		} catch (RuntimeException ex) {
			FacesUtil
					.adicionarMsgErro("Erro ao tentar remover o cliente : "
							+ ex.getMessage());
		}

	}

	public void editar() {
		try {
			ClienteDAO clienteDAO = new ClienteDAO();
			clienteDAO.editar(clienteCadastro);

			FacesUtil.adicionarMsgInfo("Cliente editado com sucesso");
		} catch (RuntimeException ex) {
			FacesUtil
					.adicionarMsgErro("Erro ao tentar editar um cliente : "
							+ ex.getMessage());
		}

	}
}